package chai.ning.object;

public class Elephant {
	
	private char[] name ; // 注意这里采用char数组保存Elephant实例的名字
	private char gender ;
	private int age ;
	
	public Elephant( String name, char gender, int age ) {
		super();
		this.name = name.toCharArray(); // 将字符串形式的名称转换为字符数组
		this.gender = gender;
		this.age = age;
	}
	
	// 重载的 equals 方法用于比较两个数组是否 "相等"
	private boolean equals( char[] first , char[] second ) {
		if( first != null && second != null ) {
			if( first.length == second.length ) {
				for( int x = 0 ; x < first.length ; x++ ) {
					// 寻找相应位置不相等的元素
					if( first[ x ] != second[ x ] ) {
						return false ; // 一旦找着，方法立即返回
					}
				}
				return true ;
			} 
		}
		return false ;
	}
	
	// 重写从Object类中继承的equals方法用于比较当前对象(this)与另外一个对象(o)是否 "相等"
	@Override
	public boolean equals( Object o ) {
		// 指示其他某个对象(another)是否与此对象(this)“相等”
		if( o instanceof Elephant ) { // o 是  Elephant 类型
			Elephant another = (Elephant) o ; // 强制类型转换
			return this.age == another.age && this.gender == another.gender && this.equals( this.name , another.name ) ;
			/*
			if( this.age == another.age && 
				this.gender == another.gender && 
				this.equals( this.name , another.name ) ) {
				return true ;
			}*/
		}
		return false ;
	}
	
	public static void main(String[] args) {
		
		Elephant e = new Elephant( "小飞象" , '男' , 10 );
		System.out.println( System.identityHashCode( e ) );
		
		Elephant p = new Elephant( "小飞象" , '男' , 10 );
		System.out.println( System.identityHashCode( p ) );
		
		// == 永远用于比较两个值知否相等，比如两个 引用变量 存储的值 是否相等
		System.out.println( e == p ); // false 
		
		Elephant x = p ;
		System.out.println( x == p ); // true
		
		System.out.println( e.equals( p ) );
		System.out.println( x.equals( p ) );
		
	}

}
